Code obfuscation is a general name for techniques for converting a program of instructions for a computer in a way that obscures its content. Code obfuscation may be applied to make it more difficult to identify the relevant part of the program needed to execute a program on an unlicensed type of computer or without protection measures.
U.S. Pat. No. 6,779,114 describes a code obfuscation technique that involves obscuring control flow of a program. Branch instructions are added to lumps of instructions in a way that obscures the intended execution order of the lumps. U.S. Pat. No. 5,559,884 describes pseudo-random reordering of basic blocks of a program to create a signature that can be used to identify a source through which the program has been distributed.
In such techniques there is a risk that the original program can be recovered. For in general the actual program flow of a processor (i.e. the way it interprets the program code) is publicly known. Hence the obfuscated program can be investigated using static and dynamic analysis techniques combined with knowledge on the targeted processor. In addition obfuscation may degrade performance. For example the obfuscated program may make caching inefficient.